home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / dev / src / tla_source.lha / tri.s < prev    next >
Text File  |  1998-01-16  |  7KB  |  426 lines

  1. ; +-----------------+
  2. ; | Sierprinski tri |
  3. ; +-----------------+-------------------------------------------------+
  4.  
  5. TRI_WAITDELAY    = 50*10
  6.  
  7.  
  8.     CNOP    0,4
  9.  
  10. TRI_INT
  11.  
  12.     ;-- GET MEMORY --
  13.  
  14.     Move.l    #250000,d0            ; Stack Mem
  15.     Move.l    #MEMF_PUBLIC|MEMF_CLEAR,d1
  16.     Call    _LVOAllocMem,exec
  17.     Move.l    d0,TRI_stkp
  18.     Beq.s    TRI_die0
  19.  
  20.     Move.l    #40*256*2,d0            ; ChipMem (display)
  21.     Move.l    #MEMF_CHIP|MEMF_CLEAR,d1
  22.     Call    _LVOAllocMem,exec
  23.     Move.l    d0,TRI_plnp
  24.     Beq.s    TRI_die1
  25.  
  26.     ;-- Init CoperList --
  27.     Move.l    d0,TRI_log
  28.     Add.l    #40*256,d0
  29.     Move.l    d0,TRI_phy
  30.     Bsr    TRI_ScrSwap
  31.  
  32.     _WaitVBL
  33.     _LoadPlanes    #TRI_bgimg, TRI_CL, 4, 40*256
  34.     _LoadPalette24    PAL_black, TRI_cp, 1
  35.     _LoadCList    TRI_CL                ; Show CopperList
  36.     Move.w    #$8380,$DFF000+DMACON    ; DMAEN | BPLEN | COPEN
  37.  
  38.     Clr.w    INT_Timer1
  39.  
  40.  
  41.  
  42.     ;----------
  43.     ;-- LOOP --
  44.     ;----------
  45.  
  46. .tri_lp
  47.  
  48.     ;-- FADE IN (IF NEEDED) --
  49.     Move.w    INT_Timer1,d1
  50.     Lsl.w    #1,d1        ; Fade Speed
  51.     Cmp.w    #255,d1        ; <fade_lev>
  52.     Bgt.s    .nofin
  53.  
  54.     Move.w    #31, d0        ; <cols-1>
  55.     Lea    PAL_black,a0    ; <pal1>
  56.     Lea    TRI_pal,a1    ; <pal2>
  57.     Lea    PAL_temp,a2    ; <temp_pal>
  58.     Jsr    __FadePalette24
  59.  
  60.     Move.w    #0,d0
  61.     Lea    PAL_temp,a0    ; <palette>
  62.     Lea    TRI_cp,a1    ; <copper palette>
  63.     Jsr    __LoadPalette24
  64. .nofin
  65.  
  66.     ;--( Fade-Out if needed )--
  67.     Move.w    INT_Timer1,d1
  68.     Neg.w    d1
  69.     Add.w    #TRI_WAITDELAY,d1
  70.     Lsl.w    #1,d1        ; Fade Speed
  71.     Cmp.w    #255,d1
  72.     Bgt.s    .nofout
  73.  
  74.     Move.w    #31, d0        ; <cols-1>
  75.     Lea    PAL_black,a0    ; <pal1>
  76.     Lea    TRI_pal,a1    ; <pal2>
  77.     Lea    PAL_temp,a2    ; <temp_pal>
  78.     Jsr    __FadePalette24
  79.  
  80.     Move.w    #0,d0
  81.     Lea    PAL_temp,a0    ; <palette>
  82.     Lea    TRI_cp,a1    ; <copper palette>
  83.     Jsr    __LoadPalette24
  84. .nofout
  85.  
  86.     ; +--------------------------+
  87.  
  88.     Lea    SINE,a0
  89.     Lea    512(a0),a1        ; Cosine Table
  90.  
  91.     ;-- CALCULATE MOVEMENT OF TRIANGLE --
  92.     Move.w    TRI_trioff,d0
  93.     Add.w    #7,d0
  94.     And.w    #$03FF,d0
  95.     Move.w    d0,TRI_trioff
  96.     Move.w    0(a0,d0.w*2),d0
  97.     Asr.w    #1,d0
  98.     Add.w    #512,d0
  99.  
  100.     ;-- CALCULATE ROTATED POINTS --
  101. ;    Move.w    TRI_trirot,d0
  102. ;    Add.w    #12,d0
  103. ;    And.w    #$03FF,d0
  104. ;    Move.w    d0,TRI_trirot            ; Angle of rotation
  105.  
  106.     Move.w    TRI_ptang + $00,d1
  107.     Add.w    d0,d1
  108.     And.w    #$03FF,d1
  109.     Move.w    0(a1,d1.w*2),d2
  110.     Asr.w    #3,d2
  111.     Move.w    0(a0,d1.w*2),d1
  112.     Asr.w    #3,d1
  113.     Add.w    #160,d1
  114.     Move.w    d1,TRI_pts + $00
  115.     Add.w    #128,d2
  116.     Move.w    d2,TRI_pts + $02
  117.  
  118.     Move.w    TRI_ptang + $02,d1
  119.     Add.w    d0,d1
  120.     And.w    #$03FF,d1
  121.     Move.w    0(a1,d1.w*2),d2
  122.     Asr.w    #3,d2
  123.     Move.w    0(a0,d1.w*2),d1
  124.     Asr.w    #3,d1
  125.     Add.w    #160,d1
  126.     Move.w    d1,TRI_pts + $04
  127.     Add.w    #128,d2
  128.     Move.w    d2,TRI_pts + $06
  129.  
  130.     Move.w    TRI_ptang + $04,d1
  131.     Add.w    d0,d1
  132.     And.w    #$03FF,d1
  133.     Move.w    0(a1,d1.w*2),d2
  134.     Asr.w    #3,d2
  135.     Move.w    0(a0,d1.w*2),d1
  136.     Asr.w    #3,d1
  137.     Add.w    #160,d1
  138.     Move.w    d1,TRI_pts + $08
  139.     Add.w    #128,d2
  140.     Move.w    d2,TRI_pts + $0A
  141.  
  142.     ;-- DRAW THE BASTARD --
  143.     Bsr    TRI_cls
  144.     Bsr    TRI_init
  145.     Bsr    TRI_ScrSwap
  146.     _WaitVBL
  147.  
  148.     Tst.w    EXIT
  149.     Bne.s    .out
  150.  
  151.     Cmp.w    #TRI_WAITDELAY,INT_Timer1
  152.     Ble.s    .tri_lp
  153.  
  154.     ;----------
  155.     ;-- QUIT --
  156.     ;----------
  157.  
  158. .out    Move.l    TRI_plnp,a1        ; Free Screen Data
  159.     Move.l    #40*256*2,d0
  160.     Call    _LVOFreeMem,exec
  161. TRI_die1
  162.     Move.l    TRI_stkp,a1        ; Free Stack Space
  163.     Move.l    #250000,d0
  164.     Call    _LVOFreeMem,exec
  165. TRI_die0
  166.  
  167.     Rts
  168.  
  169.  
  170. ; +-------------------------------------------+
  171.  
  172.  
  173.  
  174. TRI_ScrSwap
  175.     Move.l    TRI_log,d0
  176.     Move.l    TRI_phy,TRI_log
  177.     Move.l    d0,TRI_phy
  178.  
  179.     Lea    TRI_pp,a0
  180.     Move.w    d0,$06(a0)
  181.     Swap    d0
  182.     Move.w    d0,$02(a0)
  183.  
  184.     Rts
  185.  
  186.  
  187.  
  188.  
  189. TRI_cls    Move.l    TRI_log,a0
  190.     Move.w    #(40*256/4)-1,d0
  191. .clp    Clr.l    (a0)+
  192.     Dbra    d0,.clp
  193.     Rts
  194.  
  195.     ; Stack:    (uses $0E bytes stack)
  196.     ; ------    ----------------------
  197.     ; $00(a6).w -    # of iterations left (0 terminates)
  198.     ; $02(a6).w -    x1, y1
  199.     ; $06(a6).w -    x2, y2
  200.     ; $0A(a6).w -    x3, y3
  201.  
  202.  
  203. TRI_init
  204.     Move.l    TRI_log,a0    ; !! ALWAYS KEEP SCREEN PTR. IN A0 !!
  205.     Lea    TRI_pts,a1
  206.     Move.l    TRI_stkp,a6
  207.     Lea    250000(a6),a6    ; ** END of stack!! **
  208.  
  209.     Lea    -$0E(a6),a6    ; Allocate stack space for params
  210.     Move.w    #6,$00(a6)    ; # of levels
  211.     Move.l    (a1)+,$02(a6)    ; x1, y1
  212.     Move.l    (a1)+,$06(a6)    ; x2, y2
  213.     Move.l    (a1)+,$0A(a6)    ; x3, y3
  214.     Bsr    TRI_draw    ; DRAW IT
  215.     Lea    $0E(a6),a6    ; Deallocate stack
  216.     Rts
  217.  
  218.  
  219.  
  220. ;            [x1,y1]
  221. ;            /     \
  222. ;           /       \
  223. ;          /         \
  224. ;         /           \
  225. ;        /             \
  226. ;       /               \
  227. ;      /                 \
  228. ;  [x2,y2] ------------- [x3,y3]
  229.  
  230.  
  231.  
  232. TRI_draw
  233.     Move.w    $00(a6),d7
  234.     Beq.s    .bailout
  235.  
  236.  
  237.     ;-- CREATE NEW COORDS --
  238.     Move.l    $02(a6),d4    ; [ x1 | y1 ]
  239.     Move.l    $06(a6),d5    ; [ x2 | y2 ]
  240.     Move.l    $0A(a6),d6    ; [ x3 | y3 ]
  241.  
  242.     Subq.w    #1,d7
  243.  
  244.     ;-- FIND MEDIAN POINTS --
  245.     Lea    -$1A(a6),a6    ; TEMP STACK ALLOCATION    (26 bytes)
  246.  
  247.  
  248.     Move.w    d4,d1
  249.     Add.w    d5,d1
  250.     Asr.w    #1,d1        ; Y: 1-2 Average
  251.     Move.w    d1,$02(a6)    ; as [y1]
  252.     Swap    d4
  253.     Swap    d5
  254.     Move.w    d4,d0
  255.     Add.w    d5,d0
  256.     Asr.w    #1,d0        ; X: 1-2 Average
  257.     Move.w    d0,$00(a6)    ; as [x1]
  258.     Swap    d4
  259.     Swap    d5
  260.     Bsr    TRI_plot    ;        ** DRAW [x1,y1] **
  261.  
  262.     Move.w    d5,d1
  263.     Add.w    d6,d1
  264.     Asr.w    #1,d1
  265.     Move.w    d1,$06(a6)    ; as [y2]
  266.     Swap    d5
  267.     Swap    d6
  268.     Move.w    d5,d0
  269.     Add.w    d6,d0
  270.     Asr.w    #1,d0
  271.     Move.w    d0,$04(a6)    ; as [x2]
  272.     Swap    d5
  273.     Swap    d6
  274.     Bsr    TRI_plot    ;        ** DRAW [x2,y2] **
  275.  
  276.     Move.w    d4,d1
  277.     Add.w    d6,d1
  278.     Asr.w    #1,d1
  279.     Move.w    d1,$0A(a6)    ; as [y3]
  280.     Swap    d4
  281.     Swap    d6
  282.     Move.w    d4,d0
  283.     Add.w    d6,d0
  284.     Asr.w    #1,d0
  285.     Move.w    d0,$08(a6)    ; as [x3]
  286.     Swap    d4
  287.     Swap    d6
  288.     Bsr    TRI_plot    ;        ** DRAW [x3,y3] **
  289.  
  290.     ;-- NOW DRAW THEM --
  291.  
  292.     Move.w    d7,$0C(a6)    ; # Recursions left
  293.     Move.l    d4,$0E(a6)    ; [x1,y1]
  294.     Move.l    d5,$12(a6)    ; [x2,y2]
  295.     Move.l    d6,$16(a6)    ; [x3,y3]
  296.  
  297.  
  298.     Move.l    $00(a6),d0    ; [nx1,ny1]
  299.     Move.l    $08(a6),d1    ; [nx2,ny2]
  300.     Move.l    $0E(a6),d2    ; [nx3,ny3]
  301.     Move.w    $0C(a6),d7
  302.  
  303.     Lea    -$0E(a6),a6    ; TOP SEGMENT
  304.     Move.w    d7,$00(a6)
  305.     Move.l    d2,$02(a6)
  306.     Move.l    d0,$06(a6)
  307.     Move.l    d1,$0A(a6)
  308.     Bsr    TRI_draw
  309.     Lea    $0E(a6),a6    ; DONE
  310.  
  311.  
  312.  
  313.     Move.l    $00(a6),d0
  314.     Move.l    $04(a6),d1
  315.     Move.l    $12(a6),d2
  316.     Move.w    $0C(a6),d7
  317.  
  318.     Lea    -$0E(a6),a6    ; LEFT SEGMENT
  319.     Move.w    d7,$00(a6)
  320.     Move.l    d0,$02(a6)
  321.     Move.l    d2,$06(a6)
  322.     Move.l    d1,$0A(a6)
  323.     Bsr    TRI_draw
  324.     Lea    $0E(a6),a6    ; DONE
  325.  
  326.  
  327.  
  328.     Move.l    $04(a6),d0
  329.     Move.l    $08(a6),d1
  330.     Move.l    $16(a6),d2
  331.     Move.w    $0C(a6),d7
  332.  
  333.     Lea    -$0E(a6),a6    ; RIGHT SEGMENT
  334.     Move.w    d7,$00(a6)
  335.     Move.l    d1,$02(a6)
  336.     Move.l    d0,$06(a6)
  337.     Move.l    d2,$0A(a6)
  338.     Bsr    TRI_draw
  339.     Lea    $0E(a6),a6    ; DONE
  340.  
  341.     ;-- FREE UP TEMP STACK --
  342.     Lea    $1A(a6),a6
  343.  
  344. .bailout
  345.     Rts
  346.  
  347.  
  348.  
  349.  
  350. TRI_plot    ; INPUT: d0.w, d1.w = x, y
  351.         ; KILLS: d0,d1,d2
  352.  
  353.     ;-- BOUNDARY CHECKS --
  354.     Tst.w    d0
  355.     Blt.s    .waa
  356.     Tst.w    d1
  357.     Blt.s    .waa
  358.     Cmp.w    #320,d0
  359.     Bge.s    .waa
  360.     Cmp.w    #256,d1
  361.     Bge.s    .waa
  362.  
  363.     ;-- PLOT THE BASTARD --
  364.     Move.b    d0,d2
  365.     Mulu    #40,d1
  366.     Lsr.w    #3,d0
  367.     Not.w    d2
  368.     Ext.l    d0
  369.     And.w    #$07,d2
  370.     Add.l    d0,d1
  371.     Bset    d2,00(a0,d1.l)
  372.  
  373. ;    _WaitVBL
  374.  
  375. .waa    Rts
  376.         
  377. ; +-------+
  378. ; | DATAS |    
  379. ; +-------+-------------------------------------------+
  380.  
  381.  
  382. TRI_pts    Dc.w    0,0, 0,0, 0,0
  383.     Dc.w    159,5, 5,250, 315,250
  384.  
  385. TRI_ptang    Dc.w    000,341,683
  386. TRI_trirot    Dc.w    0
  387. TRI_trioff    Dc.w    0
  388.  
  389. TRI_phy    Dc.l    0
  390. TRI_log    Dc.l    0
  391.  
  392. TRI_stkp    Dc.l    0
  393. TRI_plnp    Dc.l    0
  394.  
  395. TRI_pal    dc.l    $006677cc,$005564bd,$004553ad,$0037439e
  396.     dc.l    $002b358f,$00202880,$00161c70,$000f1361
  397.     dc.l    $00080b52,$00030442,$00000033,$00ffffff
  398.     dc.l    $00ffffff,$00ffffff,$00ffffff,$00ffffff
  399.     Dc.l    $ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff
  400.     Dc.l    $ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff,$ffffff
  401.     ; +-------------------------------------------+
  402.  
  403.     section    'Copperlist',DATA_C
  404.  
  405. TRI_CL    Dc.w    BPL0PTH,0,BPL0PTL,0,BPL1PTH,0,BPL1PTL,0
  406.     Dc.w    BPL2PTH,0,BPL2PTL,0,BPL3PTH,0,BPL3PTL,0
  407. TRI_pp    Dc.w    BPL4PTH,0,BPL4PTL,0
  408.     Dc.w    DDFSTRT,$38,DDFSTOP,$D0,DIWSTRT,$2C81,DIWSTOP,$2CC1
  409.     Dc.w    BPL1MOD,0,BPL2MOD,0,FMODE,$0000
  410.     Dc.w    BPLCON0,$5201,BPLCON1,0,BPLCON2,0
  411.  
  412. TRI_cp    ColBank    1                        ; 32 colours
  413.  
  414.     Dc.w    $FFFF,$FFFE
  415.  
  416.  
  417.  
  418.     CNOP 0,4
  419. TRI_bgimg    incbin    'TLA/S-Tri/TRI_BG.RAW'
  420.  
  421.  
  422. ; +-----+
  423. ; | END |
  424. ; +-----+---------------------------------------------+
  425.  
  426.